]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
data: Create generic org.gnome.Shell.target
authorBenjamin Berg <bberg@redhat.com>
Tue, 9 Jun 2020 11:01:39 +0000 (13:01 +0200)
committerBenjamin Berg <benjamin@sipsolutions.net>
Fri, 31 Jul 2020 13:53:31 +0000 (13:53 +0000)
Move the GNOME shell service file adapation for x11/wayland into the
target/service files. This means that the session definition can simply
pull in org.gnome.Shell.target, without having to care about whether it
is starting an X11 or wayland session.

Note that this currently requires fork'ing to do the test. This will
however not be needed in the long term when ConditionEnvironment becomes
available (see https://github.com/systemd/systemd/pull/15817).

We technically do not need to use template units. But doing so means
that the unit can be translated to the app id more easily (though it is
not yet completely clear how this should look like in the long term).

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/895

data/meson.build
data/org.gnome.Shell-wayland.service.in [deleted file]
data/org.gnome.Shell-wayland.target [deleted file]
data/org.gnome.Shell-x11.service.in [deleted file]
data/org.gnome.Shell-x11.target [deleted file]
data/org.gnome.Shell.target [new file with mode: 0644]
data/org.gnome.Shell@wayland.service.in [new file with mode: 0644]
data/org.gnome.Shell@x11.service.in [new file with mode: 0644]

index da9d704f75e106a60524fc606a87c4351b0ef404..25a81422f8307a937d637f8b041485e9cd802450 100644 (file)
@@ -101,21 +101,20 @@ if have_systemd
   unitconf.set('bindir', bindir)
 
   configure_file(
-    input: 'org.gnome.Shell-x11.service.in',
-    output: 'org.gnome.Shell-x11.service',
+    input: 'org.gnome.Shell@x11.service.in',
+    output: 'org.gnome.Shell@x11.service',
     configuration: unitconf,
     install_dir: systemduserunitdir
   )
 
   configure_file(
-    input: 'org.gnome.Shell-wayland.service.in',
-    output: 'org.gnome.Shell-wayland.service',
+    input: 'org.gnome.Shell@wayland.service.in',
+    output: 'org.gnome.Shell@wayland.service',
     configuration: unitconf,
     install_dir: systemduserunitdir
   )
 
-  units = files('org.gnome.Shell-x11.target',
-                'org.gnome.Shell-wayland.target',
+  units = files('org.gnome.Shell.target',
                 'org.gnome.Shell-disable-extensions.service')
 
   install_data(units, install_dir: systemduserunitdir)
diff --git a/data/org.gnome.Shell-wayland.service.in b/data/org.gnome.Shell-wayland.service.in
deleted file mode 100644 (file)
index 98c8aa1..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-[Unit]
-Description=GNOME Shell on Wayland
-# On wayland, force a session shutdown
-OnFailure=org.gnome.Shell-disable-extensions.service gnome-session-shutdown.target
-OnFailureJobMode=replace-irreversibly
-CollectMode=inactive-or-failed
-RefuseManualStart=on
-RefuseManualStop=on
-
-After=gnome-session-manager.target
-
-Requisite=gnome-session-initialized.target
-PartOf=gnome-session-initialized.target
-Before=gnome-session-initialized.target
-
-[Service]
-Type=notify
-ExecStart=@bindir@/gnome-shell
-
-# unset some environment variables that were set by the shell and won't work now that the shell is gone
-ExecStopPost=-systemctl --user unset-environment GNOME_SETUP_DISPLAY WAYLAND_DISPLAY DISPLAY XAUTHORITY
-
-# Exit code 1 means we are probably *not* dealing with an extension failure
-SuccessExitStatus=1
-# On wayland we cannot restart
-Restart=no
-# Kill any stubborn child processes after this long
-TimeoutStopSec=5
diff --git a/data/org.gnome.Shell-wayland.target b/data/org.gnome.Shell-wayland.target
deleted file mode 100644 (file)
index 2cb2c2e..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-[Unit]
-Description=GNOME Shell on Wayland
-DefaultDependencies=no
-
-Requisite=gnome-session-initialized.target
-PartOf=gnome-session-initialized.target
-Before=gnome-session-initialized.target
-
-Requires=org.gnome.Shell-wayland.service
-After=org.gnome.Shell-wayland.service
diff --git a/data/org.gnome.Shell-x11.service.in b/data/org.gnome.Shell-x11.service.in
deleted file mode 100644 (file)
index f3c6b64..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-[Unit]
-Description=GNOME Shell on X11
-# On X11, try to show the GNOME Session Failed screen
-OnFailure=org.gnome.Shell-disable-extensions.service gnome-session-failed.target
-OnFailureJobMode=replace
-CollectMode=inactive-or-failed
-RefuseManualStart=on
-RefuseManualStop=on
-
-After=gnome-session-manager.target
-
-Requisite=gnome-session-initialized.target
-PartOf=gnome-session-initialized.target
-Before=gnome-session-initialized.target
-
-# Limit startup frequency more than the default
-StartLimitIntervalSec=15s
-StartLimitBurst=3
-
-[Service]
-Type=notify
-ExecStart=@bindir@/gnome-shell
-# Exit code 1 means we are probably *not* dealing with an extension failure
-SuccessExitStatus=1
-# On X11 we want to restart on-success (Alt+F2 + r) and on-failure.
-Restart=always
-# Do not wait before restarting the shell
-RestartSec=0ms
-# Kill any stubborn child processes after this long
-TimeoutStopSec=5
diff --git a/data/org.gnome.Shell-x11.target b/data/org.gnome.Shell-x11.target
deleted file mode 100644 (file)
index 02d6182..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-[Unit]
-Description=GNOME Shell on X11
-DefaultDependencies=no
-
-Requisite=gnome-session-initialized.target
-PartOf=gnome-session-initialized.target
-Before=gnome-session-initialized.target
-
-Requires=org.gnome.Shell-x11.service
-After=org.gnome.Shell-x11.service
diff --git a/data/org.gnome.Shell.target b/data/org.gnome.Shell.target
new file mode 100644 (file)
index 0000000..358189f
--- /dev/null
@@ -0,0 +1,10 @@
+[Unit]
+Description=GNOME Shell on Wayland
+DefaultDependencies=no
+
+Requisite=gnome-session-initialized.target
+PartOf=gnome-session-initialized.target
+Before=gnome-session-initialized.target
+
+Wants=org.gnome.Shell@wayland.service
+Wants=org.gnome.Shell@x11.service
diff --git a/data/org.gnome.Shell@wayland.service.in b/data/org.gnome.Shell@wayland.service.in
new file mode 100644 (file)
index 0000000..28ef715
--- /dev/null
@@ -0,0 +1,33 @@
+[Unit]
+Description=GNOME Shell on Wayland
+# On wayland, force a session shutdown
+OnFailure=org.gnome.Shell-disable-extensions.service gnome-session-shutdown.target
+OnFailureJobMode=replace-irreversibly
+CollectMode=inactive-or-failed
+RefuseManualStart=on
+RefuseManualStop=on
+
+After=gnome-session-manager.target
+
+Requisite=gnome-session-initialized.target
+PartOf=gnome-session-initialized.target
+Before=gnome-session-initialized.target
+
+[Service]
+Type=notify
+# NOTE: This can be replaced with ConditionEnvironment=XDG_SESSION_TYPE=%I
+#       with systemd >= 245. Also, the current solution is kind of painful
+#       as systemd had a bug where it retries the condition.
+# Only start if the template instance matches the session type.
+ExecCondition=/bin/sh -c 'test "$XDG_SESSION_TYPE" = "%I" || exit 2'
+ExecStart=@bindir@/gnome-shell
+# Exit code 1 means we are probably *not* dealing with an extension failure
+SuccessExitStatus=1
+
+# unset some environment variables that were set by the shell and won't work now that the shell is gone
+ExecStopPost=-systemctl --user unset-environment GNOME_SETUP_DISPLAY WAYLAND_DISPLAY DISPLAY XAUTHORITY
+
+# On wayland we cannot restart
+Restart=no
+# Kill any stubborn child processes after this long
+TimeoutStopSec=5
diff --git a/data/org.gnome.Shell@x11.service.in b/data/org.gnome.Shell@x11.service.in
new file mode 100644 (file)
index 0000000..be2d1ff
--- /dev/null
@@ -0,0 +1,38 @@
+[Unit]
+Description=GNOME Shell on X11
+# On X11, try to show the GNOME Session Failed screen
+OnFailure=org.gnome.Shell-disable-extensions.service gnome-session-failed.target
+OnFailureJobMode=replace
+CollectMode=inactive-or-failed
+RefuseManualStart=on
+RefuseManualStop=on
+
+After=gnome-session-manager.target
+
+Requisite=gnome-session-initialized.target
+PartOf=gnome-session-initialized.target
+Before=gnome-session-initialized.target
+
+# Limit startup frequency more than the default
+StartLimitIntervalSec=15s
+StartLimitBurst=3
+
+[Service]
+Type=notify
+# NOTE: This can be replaced with ConditionEnvironment=XDG_SESSION_TYPE=%I
+#       with systemd >= 245. Also, the current solution is kind of painful
+#       as systemd had a bug where it retries the condition.
+# Only start if the template instance matches the session type.
+ExecCondition=/bin/sh -c 'test "$XDG_SESSION_TYPE" = "%I" || exit 2'
+ExecStart=@bindir@/gnome-shell
+# Exit code 1 means we are probably *not* dealing with an extension failure
+SuccessExitStatus=1
+
+# On X11 we do not need to unset any variables
+
+# On X11 we want to restart on-success (Alt+F2 + r) and on-failure.
+Restart=always
+# Do not wait before restarting the shell
+RestartSec=0ms
+# Kill any stubborn child processes after this long
+TimeoutStopSec=5